package priv.pfz.basedao.info;

import lombok.Data;
import priv.pfz.basedao.sharding.ShardingStrategy;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.function.Function;

/**
 * 运行时解析得到的Entity字段信息
 * @author yyjxp
 * 2024/1/28 19:06
 */
@Data
public class FieldInfo {
    /**
     * java字段名
     */
    private String fieldName;

    /**
     * 数据库列名
     */
    private String columnName;
    private String columnSql;

    /**
     * 列名是否通过@Column指定的
     */
    private boolean assignedColumnName;

    /**
     * java字段对象
     */
    private Field field;

    /**
     * java字段对应的getter方法
     */
    private Method getter;

    /**
     * java字段对应的getter的lambda表达式
     */
    private Function getterFunction;

    /**
     * 是否有@NoSelect
     */
    private boolean noSelect;

    /**
     * 是否有@UniqueKey
     */
    private boolean uniqueKey;

    /**
     * 切分策略，为空表示非切分键
     */
    private ShardingStrategy<Object> shardingStrategy;

    public void setColumnName(String columnName) {
        this.columnName = columnName;
        this.columnSql = "`" + columnName + "`";
    }
}
